package com.star.star.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.star.star.dto.*;
import com.star.star.entity.StarArt;
import com.baomidou.mybatisplus.extension.service.IService;
import com.star.star.vo.*;

import java.util.List;

/**
 * 艺人作品 服务类
 *
 * @author yangzj
 */
public interface StarArtService extends IService<StarArt> {

    /**
     * 审核批量
     *
     * @param arts   艺术
     * @param starId 艺人ID
     */
    void auditBatch(List<AuditDTO> arts, Long starId);

    /**
     * 更新批量授权
     *
     * @param arts       艺术
     * @param isSchedule 是否定时
     */
    void updateBatchEmpower(List<StarArt> arts, boolean isSchedule);

    /**
     * 更新发布
     *
     * @param id        ID
     * @param isPublish 是否发布
     */
    void updatePublish(Long id, Boolean isPublish);

    /**
     * 分页
     *
     * @param dto 入参
     * @return {@link IPage}<{@link StarArtPageVO}>
     */
    IPage<StarArtPageVO> page(StarArtPageDTO dto);

    //-------------------- 以下微信小程序（用户端）接口 --------------------

    /**
     * 保存-微信小程序（用户端）
     *
     * @param dto    入参
     * @param userId 用户ID
     */
    void saveWxuser(StarArtSaveWxuserDTO dto, Long userId);

    /**
     * 更新-微信小程序（用户端）
     *
     * @param dto    入参
     * @param userId 用户ID
     */
    void updateWxuser(StarArtUpdateWxuserDTO dto, Long userId);

    /**
     * 更新批量是否专辑-微信小程序（用户端）
     *
     * @param isAlbum 是否专辑
     * @param ids     ids
     */
    void updateBatchIsAlbumWxuser(List<Long> ids, boolean isAlbum);

    /**
     * 删除通过ID-微信小程序（用户端）
     *
     * @param id     ID
     * @param userId 用户ID
     */
    void deleteByIdWxuser(Long id, Long userId);

    /**
     * 获取详情-微信小程序（用户端）
     *
     * @param id     ID
     * @param userId 用户ID
     * @return {@link StarArtDetailWxuserVO}
     */
    StarArtDetailWxuserVO getDetailWxuser(Long id, Long userId);

    /**
     * 分页-微信小程序（用户端）
     *
     * @param dto 入参
     * @return {@link IPage}<{@link StarArtPageWxuserVO}>
     */
    IPage<StarArtPageWxuserVO> pageWxuser(StarArtPageWxuserDTO dto);

    /**
     * 统计-微信小程序（用户端）
     *
     * @param userId 用户ID
     * @return {@link StarArtCountWxuserVO}
     */
    StarArtCountWxuserVO countWxuser(Long userId);

    /**
     * 播放次数+1
     *
     * @param id     ID
     * @param userId 用户ID
     */
    void playCount(Long id, Long userId);

    //-------------------- 以下通用接口 --------------------

    /**
     * 根据播放排序取前几
     *
     * @param starIds 艺人ids
     * @return {@link List}<{@link StarArt}>
     */
    List<StarArt> listPlayTop(List<Long> starIds);

    /**
     * 作品列表
     *
     * @param starId      艺人ID
     * @param isPublish   是否发布
     * @param auditStatus 审核状态
     * @param isEmpower   是否授权
     * @return {@link List}<{@link StarArtListVO}>
     */
    List<StarArtListVO> listByStarId(Long starId, Boolean isPublish, Integer auditStatus, Boolean isEmpower);

    /**
     * 收藏统计+1
     *
     * @param id        ID
     * @param increment true=+1 false=-1
     */
    void incrementCollectCount(Long id, boolean increment);

    /**
     * 点赞统计+1
     *
     * @param id        ID
     * @param increment true=+1 false=-1
     */
    void incrementLikeCount(Long id, boolean increment);

}
